﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*
 * denne klasse er en collectionklasse, der holder på vores kunder.
 * kunder er aggregerewt op i kundecollection og kundecollection sørger derfor for, at håndtere kundeobjekterme
 * */

namespace Model
{
    // KundeCollection arver fra Collection, men i dette tilfælde kun Kundeobjekterne
    public class KundeCol : Collection<Kunde>
    {
 
        // Konstruktør
        public KundeCol(List<Kunde> kundeliste)
        {
            liste = kundeliste;
            liste.Count();
        }


        // AØ Opret kunde
        public bool OpretKunde(int kundenr, string navn, string adresse,string by, int postnr, int cvr, int ean, long kontonr, string email)
        {
            try
            {
                Kunde kunde = new Kunde(kundenr, navn, adresse, by, postnr, cvr, ean, kontonr, email);
                liste.Add(kunde);
                return true;
            }
            catch
            {
                return false;
            }
        }


        //Jesper - Rediger Kunde
        public bool OpdaterKunde(int kundenr, string navn, string adresse, string by, int postnr, int cvr, int ean, long kontonr, string email)
        {
            for (int i = 0; i < liste.Count; i++)
            {
                if (kundenr == Kunder[i].Kundenr)
                {
                    liste[i].Navn = navn;
                    liste[i].Adresse = adresse;
                    liste[i].By = by;
                    liste[i].Postnr = postnr;
                    liste[i].Ean = ean;
                    liste[i].Cvr = cvr;
                    liste[i].Kontonr = kontonr;
                    liste[i].Email = email;

                    return true;
                }
            }
            return false;
        }


        public Virksomhedsdata HentVirksomhedsData(int kundenr, int virksomhedsid)
        {
            Kunde kunde = FindKunde(kundenr);
            return findVirksomhed(virksomhedsid, kunde);
            
        }


        public bool GemAendringer(Virksomhedsdata aktuelVirksomhedsData, int kundenr)
        {
            Kunde kunde = FindKunde(kundenr);
            for (int i = 0; i < kunde.Virksomhedsdata.Count; i++)
                if (kunde.Virksomhedsdata[i].Virksomhedsid == aktuelVirksomhedsData.Virksomhedsid)
                {
                    kunde.Virksomhedsdata[i] = aktuelVirksomhedsData;
                    return true;
                }

            return false;
        }


        //Jesper - Find Kunde
        public Kunde FindKunde(int kundenr)
        {
            
            foreach (Kunde kunde in liste)
            {
                if (kunde.Kundenr == kundenr)
                    return kunde;
            }

            return null; 
        }


        public int KundeCount()
        {
            return liste.Count;
        }


        private Virksomhedsdata findVirksomhed(int virksomhedsid, Kunde kunde)
        {

            foreach (Virksomhedsdata vdata in kunde.Virksomhedsdata)
                if (vdata.Virksomhedsid == virksomhedsid)
                    return vdata;
            
            return null;
        }


        //mads - slet kunde fra kundecol
        public bool SletKunde(int kundenr)
        {
            for (int i = 0; i < liste.Count; i++)
            {
                if (kundenr == Kunder[i].Kundenr)
                {
                    liste.Remove(Kunder[i]);
                    return true;
                }
            }
            return false;
        }


        // GET-proporty som returnerer kunder
        public List<Kunde> Kunder { get { return liste; } }
    }
}
